As the use of computers continues to proliferate, large organizations and/or enterprises have acquired computers from a wide variety of platforms and/or models and networked these computers together. Computers from a wide variety of platforms and/or models are also known as heterogeneous computers. Storage area networks (SAN) were developed to provide storage for the heterogeneous computers by providing a high-speed network of shared storage devices. A SAN architecture, typically, makes all storage devices available to many of the computers in a large network, such as those associated with large organizations and/or companies. In this case, the SAN architecture may pool the storage devices, for example, to ease the management of the storage devices.
Various methods of increasing the I/O rates for accessing data between computers and storage devices have been developed. Frequently, storage devices provide different levels of access latency times, throughput expressed as Input/Output (I/O) rates, and/or transfer rates, for reading data from the storage devices and for writing data to the storage devices. Storage devices, such as caches, system memory, or solid state devices (SSD), that provide, for example, fast access latency, throughput, I/O rates and/or transfer rates (referred to hereinafter as “fast storage devices”) may be used to permanently or temporarily store data as it is being communicated between applications executing on computers and storage devices that provide, for example, slower access latency, throughput, IO rates and/or transfer rates (referred to hereinafter as “slower storage devices”). When an application requests to write data, the data may be stored first in fast storage devices and then later stored in the slower storage devices. When the data is written to the fast storage device the application is informed that the data has been stored and, therefore, does not have to wait until the data is actually stored on the slower storage device.
Many of these methods have been used to speed up the communication of data between computers, such as clients, and the storage devices over a SAN for the purpose of increasing I/O rates. However, current methods for improving the speed of communication of data are subject to overhead incurred as a result of migrations between levels in a multi-level cache environment (e.g., bandwidth, cache capacity, processing, etc.) For example, data may be placed into a cache once it has been accessed a particular number of times, even if the accesses to this data are infrequent and do not exhibit high temporal locality.